/**
 * 通用工具类
 */

/*
 * 模拟form表单提交，单个参数提交
 * action : form action url
 * paramName : 参数名称
 * paramValue ： 参数值
 * method ： POST/GET
 */
function formSubmitOfSingleParam(action,paramName,paramValue,method){
	document.write('<form name=myForm></form>');
	var myForm=document.forms['myForm'];
	myForm.action=action;
	myForm.method=method;
	 
	var input = document.createElement('input');
	input.type = 'hidden';
	input.name = paramName;
	input.value = paramValue;
	myForm.appendChild(input);
	myForm.submit();
}

/*
 * 模拟form表单提交，多个参数提交
 * action : form action url
 * paramNameS : 参数名称 数组
 * paramValueS ： 参数值 数组
 * method ： POST/GET
 */
function formSubmitOfMultiParam(action,paramNameS,paramValueS,method){
	document.write('<form name=myForm></form>');
	var myForm=document.forms['myForm'];
	myForm.action=action;
	myForm.method=method;
	 
	for(var i=0;i<paramNameS.length;i++){
		var input = document.createElement('input');
		input.type = 'hidden';		//可进一步封装
		var paramName = paramNameS[i];
		var paramValue = paramValueS[i];
		input.name = paramName;
		input.value = paramValue;
		myForm.appendChild(input);
	}
	myForm.submit();
}

/*
 *  个性化显示时间，规则：
 *  今天显示："今天HH:mm", 
 *  昨天显示： "昨天HH:mm", 
 * 一个星期以内的显示： "星期X HH:mm"
 * 一个星期以前显示：" yyyy-MM-dd HH:mm"
 * @param time  格式 "yyyy-MM-dd HH:mm"
 */
function getSpecialTimeToShow(time){
	if (time == null || time == "") {
        return "";
    }
	var specialTime = time;
	var aDate = time.substring(0,time.indexOf(' ')).split('-'); 
	
	var myDate = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
	var newDate = (new Date().getMonth() + 1) + "-" + new Date().getDate() + '-' + new Date().getFullYear();
	var nowDate = new Date(Date.parse(newDate));
	if(myDate.getFullYear() != nowDate.getFullYear()){
		return specialTime;
	}
	   
	var dayDiffer = parseInt(Math.abs(nowDate - myDate) / 1000 / 60 / 60 /24); 
	if (dayDiffer < 0) { //未来的时间
        return specialTime;
    }  else if (dayDiffer == 0) { //今天时间
            specialTime = "今天" + time.substring(time.indexOf(' '));
    } else if (dayDiffer == 1) { //昨天的时间
            specialTime = "昨天" + time.substring(time.indexOf(' '));
    } else if (dayDiffer < 7){ //一个星期以内的时间
    	specialTime = getWeekDayOfDate(time) + time.substring(time.indexOf(' '));
    } 
	return specialTime;
}

function getWeekDayOfDate(time){
	var aDate = time.substring(0,time.indexOf(' ')).split('-'); 
	var myDate = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
	if(myDate.getDay() == 0){
		return "星期日";
	} else if(myDate.getDay() == 1){
		return "星期一";
	} else if(myDate.getDay() == 2){
		return "星期二";
	} else if(myDate.getDay() == 3){
		return "星期三";
	} else if(myDate.getDay() == 4){
		return "星期四";
	} else if(myDate.getDay() == 5){
		return "星期五";
	} else{
		return "星期六";
	}
}

/**
 * 加密
 * 
 * @param content
 * @param srcKey
 * @returns
 */
function encrypt(content,srcKey){
	return hex_md5(content).toString();
	
    /*var keyLen = 8;
	  var srcKeyLen = srcKey.length;
	
	 if(srcKeyLen > keyLen){
		 srcKey = srcKey.substr(0,keyLen);
		
	 }else{
		 var paddLen = keyLen -  srcKeyLen;
		 for(var i=0;i<paddLen;i++){
			 srcKey += "0";
		 }
	 }
	
	 var key = CryptoJS.enc.Utf8.parse(srcKey);		
	 var encryptStr =  CryptoJS.DES.encrypt(content, key, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
	return encryptStr.toString();*/
}

var chars = ['0','1','2','3','4','5','6','7','8','9'];

/**
 * 获取随机密码，6位数
 * 
 * @returns {String}
 */
function randomPwd() {
     var res = "";
     for(var i = 0; i < 6 ; i ++) {
         var id = Math.ceil(Math.random()*9);
         res += chars[id];
     }
     return res;
}

//除法函数，用来得到精确的除法结果
//说明：javascript的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用：accDiv(arg1,arg2)
//返回值：arg1除以arg2的精确结果
function accDiv(arg1,arg2){
  var t1=0,t2=0,r1,r2;
  try{t1=arg1.toString().split(".")[1].length}catch(e){}
  try{t2=arg2.toString().split(".")[1].length}catch(e){}
  with(Math){
      r1=Number(arg1.toString().replace(".",""));
      r2=Number(arg2.toString().replace(".",""));
      return (r1/r2)*pow(10,t2-t1);
  }
}
//给Number类型增加一个div方法，调用起来更加方便。
Number.prototype.div = function (arg){
  return accDiv(this, arg);
};
//乘法函数，用来得到精确的乘法结果
//说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用：accMul(arg1,arg2)
//返回值：arg1乘以arg2的精确结果
function accMul(arg1,arg2)
{
  var m=0,s1=arg1.toString(),s2=arg2.toString();
  try{m+=s1.split(".")[1].length}catch(e){}
  try{m+=s2.split(".")[1].length}catch(e){}
  return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
//给Number类型增加一个mul方法，调用起来更加方便。
Number.prototype.mul = function (arg){
  return accMul(arg, this);
};
//加法函数，用来得到精确的加法结果
//说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用：accAdd(arg1,arg2)
//返回值：arg1加上arg2的精确结果
function accAdd(arg1,arg2){
  var r1,r2,m;
  try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;}
  try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;}
  m=Math.pow(10,Math.max(r1,r2));
  return (arg1*m+arg2*m)/m;
}
//给Number类型增加一个add方法，调用起来更加方便。
Number.prototype.add = function (arg){
  return accAdd(arg,this);
};
//减法函数
function accSub(arg1,arg2){
   var r1,r2,m,n;
   try{
       r1=arg1.toString().split(".")[1].length;
       }catch(e){
           r1=0;
           }
   try{
       r2=arg2.toString().split(".")[1].length;
       }catch(e){
           r2=0;
           }
   m=Math.pow(10,Math.max(r1,r2));
   //last modify by deeka
   //动态控制精度长度
   n=(r1>=r2)?r1:r2;
   return ((arg2*m-arg1*m)/m).toFixed(n);
}
///给number类增加一个sub方法，调用起来更加方便
Number.prototype.sub = function (arg){
  return accSub(arg,this);
};

Array.prototype.indexOf = function(val) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == val)
			return i;
	}
	return -1;
};

Array.prototype.remove = function(val) {
	var index = this.indexOf(val);
	if (index > -1) {
		this.splice(index, 1);
	}
};